---
title: Slack
sidebarTitle: Slack
---

This documentation describes the integration of MindsDB with [Slack](https://slack.com/), a cloud-based collaboration platform.
The integration allows MindsDB to access data from Slack and enhance Slack with AI capabilities.

## Prerequisites

Before proceeding, ensure the following prerequisites are met:

1. Install MindsDB [locally via Docker](https://docs.mindsdb.com/setup/self-hosted/docker) or use [MindsDB Cloud](https://cloud.mindsdb.com/).
2. To connect Slack to MindsDB, install the required dependencies following [this instruction](/setup/self-hosted/docker#install-dependencies).
3. Install or ensure access to Slack.

## Connection

Establish a connection to Slack from MindsDB by executing the following SQL command and providing its [handler name](https://github.com/mindsdb/mindsdb/tree/staging/mindsdb/integrations/handlers/slack_handler) as an engine.

```sql
CREATE DATABASE slack_conn
WITH ENGINE = 'slack', 
PARAMETERS = {
   "token": "values",     -- required parameter
   "app_token": "values"  -- optional parameter
};
```

The Slack handler is initialized with the following parameters:

* `token` is a Slack bot token to use for authentication.
* `app_token` is a Slack app token to use for authentication.

<Note>
Please note that `app_token` is an optional parameter. Without providing it, you need to integrate an app into a Slack channel.
</Note>

### Method 1: Chatbot responds in direct messages to a Slack app

One way to connect Slack is to use both bot and app tokens. By following the instructions below, you'll set up the Slack app and be able to message this Slack app directly to chat with the bot.

<Note>
If you want to use Slack in the [`CREATE CHATBOT`](/agents/chatbot) syntax, use this method of connecting Slack to MindsDB.
</Note>

<Accordion title="Set up a Slack app and generate tokens">
Here is how to set up a Slack app and generate both a Slack bot token and a Slack app token:

  1. Follow [this link](https://api.slack.com/apps) and sign in with your Slack account.
  2. Create a new app `From scratch` or select an existing app.
      - Please note that the following instructions support apps created `From scratch`.
      - For apps created `From an app manifest`, please follow the [Slack docs here](https://api.slack.com/reference/manifests).
  3. Go to *Basic Information* under *Settings*.
      - Under *App-Level Tokens*, click on *Generate Token and Scopes*.
      - Name the token `socket` and add the `connections:write` scope.
      - **Copy and save the `xapp-...` token - you'll need it to publish the chatbot.**
  4. Go to *Socket Mode* under *Settings* and toggle the button to *Enable Socket Mode*.
  5. Go to *OAuth & Permissions* under *Features*.
      - Add the following *Bot Token Scopes*:
        - channels:history
        - channels:read
        - chat:write
        - groups:read
        - im:history
        - im:read
        - im:write
        - mpim:read
        - users.profile:read
      - In the *OAuth Tokens for Your Workspace* section, click on *Install to Workspace* and then *Allow*.
      - **Copy and save the `xoxb-...` token - you'll need it to publish the chatbot.**
  6. Go to *App Home* under *Features* and click on the checkbox to *Allow users to send Slash commands and messages from the messages tab*.
  7. Go to *Event Subscriptions* under *Features*.
      - Toggle the button to *Enable Events*.
      - Under *Subscribe to bot events*, click on *Add Bot User Event* and add `message.im`.
      - Click on *Save Changes*.
  8. Now you can use tokens from points 3 and 5 to initialize the Slack handler in MindsDB.
</Accordion>

Here is how to connect Slack to MindsDB:

```sql
CREATE DATABASE mindsdb_slack
WITH
  ENGINE = 'slack',
  PARAMETERS = {
      "token": "xoxb-...",
      "app_token": "xapp-..."
    };
```

It comes with the `channels` and `channel_lists` table.

### Method 2: Chatbot responds on a defined Slack channel

Another way to connect to Slack is to use the bot token only. By following the instructions below, you'll set up the Slack app and integrate it into one of the channels from which you can directly chat with the bot.

<Accordion title="Set up a Slack app and generate tokens">
Here is how to set up a Slack app and generate a Slack bot token:

  1. Follow [this link](https://api.slack.com/apps) and sign in with your Slack account.
  2. Create a new app `From scratch` or select an existing app.
      - Please note that the following instructions support apps created `From scratch`.
      - For apps created `From an app manifest`, please follow the [Slack docs here](https://api.slack.com/reference/manifests).
  3. Go to the *OAuth & Permissions* section.
  4. Under the *Scopes* section, add the *Bot Token Scopes* necessary for your application. You can add more later as well.
      - channels:history
      - channels:read
      - chat:write
      - groups:read
      - im:read
      - mpim:read
  5. Install the bot in your workspace.
  6. Under the *OAuth Tokens for Your Workspace* section, copy the the *Bot User OAuth Token* value.
  7. Open your Slack application and add the App/Bot to one of the channels:
      - Go to the channel where you want to use the bot.
      - Right-click on the channel and select *View Channel Details*.
      - Select *Integrations*.
      - Click on *Add an App*.
  8. Now you can use the token from step 6 to initialize the Slack handler in MindsDB and use the channel name to query and write messages.
</Accordion>

Here is how to connect Slack to MindsDB:

```sql
CREATE DATABASE mindsdb_slack
WITH
  ENGINE = 'slack',
  PARAMETERS = {
      "token": "xoxb-..."
    };
```

It comes with the `channels` and `channel_lists` table.

## Usage

<Warning>
The following usage applies when **Connection Method 2** was used to connect Slack.

See the usage for **Connection Method 1** [via the `CREATE CHATBOT` syntax](/sql/tutorials/create-chatbot).
</Warning>

You can select all messages from the channel using the below query.

```sql
SELECT *
FROM mindsdb_slack.channels
WHERE channel="<channel-name>";
```

Also, you can post messages to the channel like this:

```sql
INSERT INTO mindsdb_slack.channels (channel, text)
VALUES("<channel-name>", "Hey MindsDB, Thanks to you! Now I can respond to my Slack messages through SQL Queries.");
```

And you can delete messages, but only the ones posted by the bot.

```sql
DELETE FROM mindsdb_slack.channels
WHERE channel = "<channel-name>"
AND ts = "1688863707.197229";
```

Let's select 10 messages created after the specified timestamp:

```sql
SELECT *
FROM mindsdb_slack.channels
WHERE channel="<channel-name>"
AND message_created_at > '2023-07-25 00:13:07'
LIMIT 10;
```

We can also order the selected messages:

```sql
SELECT *
FROM mindsdb_slack.channels
WHERE channel="<channel-name>"
ORDER BY messages ASC
LIMIT 5;
```

List all channels by selecting from the `channel_lists` table.

```sql
SELECT *
FROM mindsdb_slack.channel_lists;
```

<Tip>
**Next Steps**

Follow [this tutorial](/sql/tutorials/slack-chatbot) to see more use case examples.
</Tip>
